<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    // 1.全局变量(global variable): 在全局(script元素中)定义一个变量, 那么这个变量是可以在定义之后的任何范围内被访问到的, 那么这个变量就称之为是一个全局变量.
    var message = "Hello World"

    // 在函数中访问message
    function sayHello() {
      // 外部变量(outer variable): 在函数内部去访问函数之外的变量, 访问的变量称之为外部变量
      console.log("sayHello中访问message:", message)

      // 2.局部变量(local variable): 在函数内部定义的变量, 只有在函数内部才能进行访问, 称之为局部变量
      var nickname = "张三"

      function hi() {
        console.log("hi function~")
        // message也是一个外部变量
        console.log("hi中访问message:", message)
        // nickname也是一个外部变量
        console.log("hi中访问nickname:", nickname)
      }
      hi()
    }

    sayHello()

    // 变量访问顺序 作用域链
    // var message = "Hello World"

    function sayHello() {
      // var message = "Hello 张三"

      function hi() {
        // var message = "Hi Kobe"
        console.log(message)
      }
      hi()
    }

    sayHello()


    // 函数表达式
    // 函数的声明(声明语句)
    foo()
    function foo() {
      console.log("foo函数被执行了~")
    }

    // 函数的表达式
    // console.log(message) // undefined
    // var message = "Lily"

    // console.log(bar)
    // 函数表达式可以省略函数名
    // 先调用 后声明 
    // 函数表达式不可行 普通的声明可行
    bar()
    var bar = function () {
      console.log("bar函数被执行了~")
    }


  </script>

</body>

</html>